/**
 * 数据类型定义
 * 使用 JSDoc 提供类型提示
 */

/**
 * @typedef {Object} DataSource
 * @property {string} id - 数据源ID
 * @property {string} name - 数据源名称
 * @property {string} type - 数据源类型
 * @property {string} status - 连接状态
 * @property {string} description - 描述
 * @property {Array} data - 数据内容
 * @property {Array<TableSchema>} tables - 表结构
 */

/**
 * @typedef {Object} TableSchema
 * @property {string} id - 表ID
 * @property {string} name - 表名
 * @property {string} description - 表描述
 * @property {number} rowCount - 行数
 * @property {Array<FieldSchema>} fields - 字段列表
 * @property {Object} position - 位置信息
 */

/**
 * @typedef {Object} FieldSchema
 * @property {string} id - 字段ID
 * @property {string} name - 字段名称
 * @property {string} dataType - 数据类型
 * @property {string} category - 字段类别（维度/度量值）
 * @property {boolean} isPrimaryKey - 是否主键
 * @property {boolean} isForeignKey - 是否外键
 * @property {boolean} isCalculated - 是否计算字段
 * @property {string} expression - 计算表达式
 */

/**
 * @typedef {Object} Relationship
 * @property {string} id - 关系ID
 * @property {string} name - 关系名称
 * @property {string} fromTable - 源表ID
 * @property {string} fromField - 源字段ID
 * @property {string} toTable - 目标表ID
 * @property {string} toField - 目标字段ID
 * @property {string} type - 关系类型
 * @property {boolean} isActive - 是否激活
 */

/**
 * @typedef {Object} Visualization
 * @property {string} id - 可视化ID
 * @property {string} type - 图表类型
 * @property {string} title - 标题
 * @property {Object} data - 数据配置
 * @property {Object} position - 位置信息
 * @property {Object} size - 尺寸信息
 * @property {Object} style - 样式配置
 */

/**
 * @typedef {Object} CleaningRule
 * @property {string} id - 规则ID
 * @property {string} name - 规则名称
 * @property {string} type - 规则类型
 * @property {Object} config - 规则配置
 * @property {boolean} enabled - 是否启用
 */

/**
 * @typedef {Object} CleaningOperation
 * @property {string} id - 操作ID
 * @property {string} name - 操作名称
 * @property {string} type - 操作类型
 * @property {string} sourceId - 数据源ID
 * @property {number} timestamp - 时间戳
 * @property {Object} details - 操作详情
 */

/**
 * @typedef {Object} QualityMetrics
 * @property {number} completeness - 完整性评分
 * @property {number} consistency - 一致性评分
 * @property {number} validity - 有效性评分
 * @property {number} uniqueness - 唯一性评分
 */

/**
 * @typedef {Object} UserPreferences
 * @property {string} theme - 主题
 * @property {string} language - 语言
 * @property {number} pageSize - 分页大小
 * @property {boolean} autoSave - 自动保存
 * @property {Object} chartDefaults - 图表默认配置
 */

/**
 * @typedef {Object} ReportConfig
 * @property {string} id - 报表ID
 * @property {string} title - 报表标题
 * @property {string} description - 报表描述
 * @property {Object} layout - 布局配置
 * @property {Array<Visualization>} visualizations - 可视化组件列表
 * @property {Object} filters - 筛选器配置
 * @property {Object} theme - 主题配置
 */

/**
 * @typedef {Object} ApiResponse
 * @property {boolean} success - 是否成功
 * @property {*} data - 响应数据
 * @property {string} message - 消息
 * @property {string} code - 错误代码
 */

/**
 * @typedef {Object} FileInfo
 * @property {string} name - 文件名
 * @property {string} type - 文件类型
 * @property {number} size - 文件大小
 * @property {Date} lastModified - 最后修改时间
 * @property {ArrayBuffer} content - 文件内容
 */

/**
 * @typedef {Object} ChartData
 * @property {Array} labels - 标签数组
 * @property {Array} datasets - 数据集数组
 * @property {Object} options - 图表选项
 */

/**
 * @typedef {Object} FilterConfig
 * @property {string} field - 筛选字段
 * @property {string} operator - 操作符
 * @property {*} value - 筛选值
 * @property {string} logic - 逻辑关系（AND/OR）
 */

/**
 * @typedef {Object} SortConfig
 * @property {string} field - 排序字段
 * @property {string} direction - 排序方向（asc/desc）
 */

/**
 * @typedef {Object} PaginationConfig
 * @property {number} page - 当前页码
 * @property {number} pageSize - 每页大小
 * @property {number} total - 总记录数
 */

/**
 * @typedef {Object} LoadingState
 * @property {boolean} loading - 是否加载中
 * @property {string} message - 加载消息
 * @property {number} progress - 进度百分比
 */

/**
 * @typedef {Object} ErrorState
 * @property {boolean} hasError - 是否有错误
 * @property {string} message - 错误消息
 * @property {string} code - 错误代码
 * @property {Object} details - 错误详情
 */

// 导出类型验证函数
export const TypeValidators = {
  /**
   * 验证数据源对象
   * @param {*} obj 
   * @returns {boolean}
   */
  isDataSource(obj) {
    return obj && 
           typeof obj.id === 'string' &&
           typeof obj.name === 'string' &&
           typeof obj.type === 'string' &&
           Array.isArray(obj.tables)
  },

  /**
   * 验证字段对象
   * @param {*} obj 
   * @returns {boolean}
   */
  isField(obj) {
    return obj &&
           typeof obj.id === 'string' &&
           typeof obj.name === 'string' &&
           typeof obj.dataType === 'string' &&
           typeof obj.category === 'string'
  },

  /**
   * 验证关系对象
   * @param {*} obj 
   * @returns {boolean}
   */
  isRelationship(obj) {
    return obj &&
           typeof obj.fromTable === 'string' &&
           typeof obj.fromField === 'string' &&
           typeof obj.toTable === 'string' &&
           typeof obj.toField === 'string' &&
           typeof obj.type === 'string'
  },

  /**
   * 验证可视化对象
   * @param {*} obj 
   * @returns {boolean}
   */
  isVisualization(obj) {
    return obj &&
           typeof obj.id === 'string' &&
           typeof obj.type === 'string' &&
           typeof obj.title === 'string' &&
           obj.data && obj.position && obj.size
  }
}



